package Annotation;

/**
 * @Author: ylc
 * @Description:通过注解获取类对象
 * @Date Created in 2022-04-19 17:19
 */

@Properties(className = "Day01.domain.Person",methodName = "eat")
public class ReflectTest2 {
    public static void main(String[] args) throws Exception{
        /*
            需求：写一个"框架"，不能改变该类的任何代码的前提下，可以帮我们创建任意类的对象，并且执行其中任意方法
        */
        //1.解析注解
        //1.1获取字节码文件对象
        Class<ReflectTest2> reflectTest2Class = ReflectTest2.class;
        //2.获取上面定义的注解对象
        Properties an = reflectTest2Class.getAnnotation(Properties.class);
        //3.调用注解中的方法
        //实际上是在内存中生成了一个该注解接口的子类实现对象
        String className = an.className();
        String methodName = an.methodName();
        /*
            public class propertiesImpl implements Properties{
                public String className(){
                    return "Day01.domain.Person";
                }
                public String methodName(){
                    return "eat";
                }
            }
         */
        System.out.println(className);
        System.out.println(methodName);
    }
}
